/* 

1. async-await异步函数作用 ： 相当于promise高级写法
    1.1 promise作用： 解决回调地狱
        回调地狱： 异步回调，层层嵌套
    1.2 promise语法
        第一步：声明promise对象  
            let p = new Promise((resolve,reject)=>{ //异步操作 })
        第二步：调用promise对象的then方法
            p.then(data=>{}).catch(err=>{})
    1.3 promise解决回调地狱方式： 在上一个promise对象的then方法中返回下一个promise对象

2. async-await语法
    2.1 函数使用async修饰 ： async function(){}
    2.2 在函数中使用await来调用promise :  let data = await promise对象
        * data就是promise的then中的结果
        * 优点：没有promise的then回调，代码看起来与同步代码几乎一致

3. async-await的异常只能用try-catch来捕捉

*/

//依次读取文件a,b,c,d

const fs = require('fs')

function getPromise (filename) {
  return new Promise((resolve, reject) => {
    fs.readFile(`${__dirname}/data/${filename}.txt`, 'utf-8', (err, data) => {
      if (err) {
        //调用catch ： 异步失败
        reject(err)
      } else {
        //调用then : 异步成功
        resolve(data)
      }
    })
  })
}

async function fn () {
  try {

    let data1 = await getPromise('a')
    console.log(data1)

    let data2 = await getPromise('b2')
    console.log(data2)

    let data3 = await getPromise('c')
    console.log(data3)

    let data4 = await getPromise('d')
    console.log(data4)

  } catch (err) {
    console.log(err)
  }
}

fn()

// getPromise('a').then(data=>{
//     console.log(data)
//     return getPromise('b')
// }).then(data=>{
//     console.log(data)
//     return getPromise('c')
// }).then(data=>{
//     console.log(data)
//     return getPromise('d')
// }).then(data=>{
//     console.log(data);
// })
